package workflow;

import java.util.ArrayList;

public class TPEnGeneracion
{
  Workflow workflow;
  ArrayList<Tema> temas = new ArrayList<Tema>();
  Creador creador;
  int correccionesRecibidas = 0;
  
  public TPEnGeneracion(Workflow workflow){
    this.workflow = workflow;
  }
  
  public void conocer(Creador creador){
    this.creador = creador;
  }
  
  public void recibirGeneraciones(ArrayList<Tema> temas)
  {
    for(Tema i : temas)
    {
      this.temas.add(i);
    }
  }
  
  public void notificarGeneracion()
  {
    if(temas.size() == workflow.getCreador().getTemas().size())
    {
      workflow.getCreador().habilitarCorreccion();  //cambiarPermiso(new CEnCorreccion(workflow.getCreador()))
      workflow.getCreador().recibirTemasACorregir(temas);
    }
  }
  
  public ArrayList<Tema> getTemas()
  {
    return temas;
  }

  public void setTemas(ArrayList<Tema> temas)
  {
    this.temas = temas;
  }

  public void recibirCorrecciones(ArrayList<Tema> correcciones)
  {
    for(Tema i : correcciones)
    {
      temas.set(i.getIndice(), i);
      correccionesRecibidas++;
    }
  }

  public int obtenerIndiceDelTema(String titulo)
  {
    Tema tema = searchAndGetTemaxTitulo(titulo);
    int index = getTemas().indexOf(tema);
    return index; 
  }
    
  public void recibirCorreccion(Tema correccion)
  {
    int index = obtenerIndiceDelTema(correccion.getTitulo());
    getTemas().set(index,correccion);
    correccionesRecibidas++;
  }
  
  public void notificarCorreccion()
  {
    if(correccionesRecibidas == temasEnCorreccion())
    {
      workflow.getCreador().habilitarCorreccion();
      workflow.getCreador().recibirTemasACorregir(temas);
      correccionesRecibidas = 0;
    }
  }
  
  public void eliminarDesaprobados(){
    for(Tema i : temas)
    {
      if(i.isDesaprobado())
      {
        temas.remove(i);
      }
    }
  }
  
  public void indexarTemas()
  {
    int indice = 0;
    for(Tema i : temas)
    {
      i.setIndice(indice);
      indice++;
    }
  }
  
  public int temasEnCorreccion()
  {
    int counter = 0;
    for(Tema i : temas)
    {
      if(!i.getCalificacion())
      {
        counter++;
      }
    }
    return counter;
  }

  public boolean areTemasAprobados()
  {
    boolean estado = true;
    for(Tema i : temas)
    {
      if(!i.getCalificacion())
      {
        estado=false;
      }
    }
    return estado;
  }
  
  public Tema searchAndGetTemaxTitulo(String titulo){
    ArrayList<Tema> temas = getTemas();
    Tema tema = null;
    for(Tema i : temas)
    {
      if(i.getTitulo()==titulo)
      {
        tema = i;
      }
    }
    return tema;
   }

}
